“Infrastructure-as-a-Service” (also commonly referred to as “IaaS”) generally describes a suite of technologies provided by a service provider as an integrated solution to allow for elastic creation of a fully virtualized, network, and pooled computing platform (sometimes referred to as “cloud computing platform”). Enterprises may use IaaS as a business-internal organizational cloud computing platform (sometimes referred to as a “private cloud”) that gives an application developer access to infrastructure resources, such as virtualized servers, storage, and networking resources. By providing ready access to the hardware resources required to run an application, the cloud computing platform enables developers to build, deploy, and manage the lifecycle of a web application (or any other type of networked application) at a greater scale and at a faster pace than ever before.
However, deployment tools currently in use are usually a homegrown patchwork of various software products from different vendors. Such tools are generally process-driven with heavy reliance on custom scripts and property files. Additionally, these tools often utilize too much network bandwidth through continuous polling for readiness of execution or rely on a centralized mechanism that causes a central point of resource contention. Traditional deployment tools are also not configured for automation with cloud computing platforms that dynamically provision virtual computing resources.
Further, applications are typically developed with a multi-tier architecture in which functions such as presentation, application processing, and data management are logically separate components. For example, an enterprise's custom banking application that has a multi-tier architecture may use a cluster of application servers (e.g., JBoss Application Servers) to execute in a scalable runtime environment, a relational database management system (e.g., MySQL) to store account data, and a load balancer to distribute network traffic for robustness. To deploy such a multi-tier application, a developer, who understands the architecture of the application, must coordinate with a system administrator, who controls access to computing resources, to determine which computing resources (e.g., computing, networking, and storage) and software services (e.g., software packages) should be provisioned to support execution of the application. However, developers and system administrators typically view an application differently. Developers see an application as a group of components with interdependencies, while system administrators view an application as a series of “runbook” steps to be followed for deployment. As such, there are challenges for developers and system administrators to collaborate on determining deployment requirements for an application.